package com.hengpeng.itfinoss.service.article;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;

import com.hengpeng.common.exception.ServiceResult;
import com.hengpeng.common.persist.QueryResult;
import com.hengpeng.common.persist.entity.AbstractEntity;
import com.hengpeng.common.persist.entity.AbstractEntity.BoolValue;
import com.hengpeng.common.persist.query.model.Order.OrderType;
import com.hengpeng.itfinbase.persist.Article;
import com.hengpeng.itfinbase.persist.ArticleDiscuss;

/**
 * 新闻接口
 * @author LanMingMing
 */

public interface ArticleService
{

	/**
	 * <pre>
	 *  新增新闻
	 * </pre>
	 * @param article
	 * @return
	 */
	public ServiceResult<Article> save(Article article);

	/**
	 * <pre>
	 * 修改新闻 
	 * </pre>
	 * @param article
	 * @return
	 */
	public ServiceResult<Article> modfiy(Article article);

	/**
	 * <pre>
	 *  批量删除新闻
	 * </pre>
	 * @param ids
	 * @return
	 */
	public ServiceResult<Article> remove(Set<Object> ids);

	/**
	 * <pre>
	 *  获取新闻
	 * </pre>
	 * @param id 新闻流水号
	 * @return
	 */
	public ServiceResult<Article> get(Long id);

	/**
	 * <pre>
	 * 加载新闻
	 * </pre>
	 * @param id 新闻流水号
	 * @return
	 */
	public ServiceResult<Article> load(Long id);

	/**
	 * <pre>
	 *  查询所有新闻
	 * </pre>
	 * @return
	 */
	public ServiceResult<List<Article>> findAll();

	/**
	 * <pre>
	 *  分页查询新闻
	 * </pre>
	 * @param appUserId 操作员编号
	 * @param author 作者
	 * @param categoryId 新闻类别流水号
	 * @param content 新闻内容
	 * @param fullTitle 完整标题
	 * @param isAudited 新闻是否审核
	 * @param isHignlight 新闻是否高亮显示
	 * @param isTop 新闻是否置顶
	 * @param source 新闻来源
	 * @param updateTime1 新闻更新时间1
	 * @param updateTime2 新闻更新时间2
	 * @param setTopEndTime1新闻置顶结束时间1
	 * @param setTopEndTime1 新闻置顶结束时间2
	 * @param indexPage 当前页号
	 * @param pageSize 每页显示新闻数
	 * @param sortMap 排序集合
	 * @return
	 */
	public ServiceResult<List<Article>> findArticlePage(String appUserId, String author, Long[] categoryIds,
			String content, String fullTitle, BoolValue isAudited, BoolValue isHignlight, BoolValue isTop,
			String source, Date updateTime1, Date updateTime2, Date setTopEndTime1, Date setTopEndTime2,
			Integer indexPage, Integer pageSize, LinkedHashMap<String, OrderType> sortMap);

	public ServiceResult<Long> findArticleCount(String appUserId, String author, Long[] categoryIds, String content,
			String fullTitle, BoolValue isAudited, BoolValue isHignlight, BoolValue isTop, String source,
			Date updateTime1, Date updateTime2, Date setTopEndTime1, Date setTopEndTime2);

	public QueryResult<Article> findArticle(long id, String appUserId, String author, Long[] categoryIds,
			String content, String fullTitle, BoolValue isAudited, BoolValue isHignlight, BoolValue isTop,
			String source, Date updateTime1, Date updateTime2, Date setTopEndTime1, Date setTopEndTime2,
			Integer pageIndex, Integer pageSize, LinkedHashMap<String, OrderType> sortMap);

	/**
	 * <pre>
	 *  查询一组类别下的新闻
	 * </pre>
	 * @param ids 新闻类别流水号数组
	 * @return
	 */
	public ServiceResult<List<Article>> findArticleByCategoryIds(Long[] ids);

	public <T extends AbstractEntity> ServiceResult<T> batchRemove(String field, Object[] values, Class<T> type);

	public <T extends AbstractEntity> List<T> findUnionArticleById(String field, Object[] values, Class<T> type);

	/**
	 * 查询评论
	 * @param id
	 * @param content
	 * @param userName
	 * @param publishTime_s
	 * @param publishTime_e
	 * @param state
	 * @param auditor
	 * @param auditTime_s
	 * @param auditTime_e
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	public QueryResult<ArticleDiscuss> findDicuss(long id, String content, String userName, Date publishTime_s,
			Date publishTime_e, String state, String auditor, Date auditTime_s, Date auditTime_e, int currentPage,
			int pageSize);

	/**
	 * 查询评论
	 * @param ids
	 * @return
	 */
	public List<ArticleDiscuss> findDicuss(Long[] ids);

}
